#include "Control.h"
#include "Surface.h"
#include <clocale>
#include <eggx.h>
#include <eggx_color.h>
#include <iostream>
#include <limits>
//#include <gtest/gtest.h>
//#include <cstdint>
int input();

int main() {
    // setlocale(LC_ALL, "Russian");
    int num_of_steps = 100, max_height = 10, min_height = 100, rain_mod = 1;
    Control control(num_of_steps, max_height, min_height,rain_mod);
    while(true) {
        std::cout << "Добро пожаловать в программный модуль симуляции и визуализации модели природных катаклизмов в виде наводнений!\n Выберите режим работы:\n" <<
                  "1. Ввести параметры симуляции\n2. Запустить симуляцию\n3. Отобразить поверхность\n4. Выйти\n";
        int num = input();
        while (!((num == 1) || (num == 2) || (num == 3) || (num == 4))) {
            num = input();
        }
        switch (num) {
            case 1:
                std::cout << "Количество шагов симуляции\n";
                num_of_steps = input();
                std::cout << "Минимальная высота поверхности\n";
                min_height = input();
                std::cout << "Максимальная высота поверхности\n";
                max_height = input();
                std::cout << "Мощность дождя\n";
                rain_mod = input();
                control = Control(num_of_steps, min_height, max_height, rain_mod);
                break;
            case 2:
                control.simulate();
                ggetch();
                gcloseall();
                break;
            case 3:
                control.draw(DS9_GREEN);
                ggetch();
                gcloseall();
                break;
            case 4:
                gcloseall();
                return 0;
            default:
                std::cout << "\nНеверный ввод, ввод должен быть 1, 2, 3 или 4.\n";
                return 0;
        }
    }
    return 0;
}

int input() {
    int num;
    while (std::cout << "Введите число: " && !(std::cin >> num)) {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "Неправильный ввод, введите снова\n";
    }
    return num;
}
//
//TEST(ImageTest, draw) {
//    Surface surf;
//    Image img;
//    EXPECT_EQ(img.draw(surf, DS9_GREEN), 1);
//}
//
//int main(int argc, char ** argv ) {
//    ::testing::InitGoogleTest(&argc, argv);
//    return RUN_ALL_TESTS();
//}



